{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 京东JData算法大赛(2)-数据分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 导入相关包\n",
    "%matplotlib inline\n",
    "# 绘图包\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 定义文件名\n",
    "ACTION_201602_FILE = \"data/JData_Action_201602.csv\"\n",
    "ACTION_201603_FILE = \"data/JData_Action_201603.csv\"\n",
    "ACTION_201603_EXTRA_FILE = \"data/JData_Action_201603_extra.csv\"\n",
    "ACTION_201604_FILE = \"data/JData_Action_201604.csv\"\n",
    "COMMENT_FILE = \"data/JData_Comment.csv\"\n",
    "PRODUCT_FILE = \"data/JData_Product.csv\"\n",
    "USER_FILE = \"data/JData_User.csv\"\n",
    "NEW_USER_FILE = \"data/JData_User_New.csv\"\n",
    "USER_TABLE_FILE = \"data/user_table.csv\"\n",
    "ITEM_TABLE_FILE = \"data/item_table.csv\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 周一到周日各天购买情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 提取购买(type=4)的行为数据\n",
    "def get_from_action_data(fname, chunk_size=100000):\n",
    "    reader = pd.read_csv(fname, header=0, iterator=True)\n",
    "    chunks = []\n",
    "    loop = True\n",
    "    while loop:\n",
    "        try:\n",
    "            chunk = reader.get_chunk(chunk_size)[\n",
    "                [\"user_id\", \"sku_id\", \"type\", \"time\"]]\n",
    "            chunks.append(chunk)\n",
    "        except StopIteration:\n",
    "            loop = False\n",
    "            print(\"Iteration is stopped\")\n",
    "\n",
    "    df_ac = pd.concat(chunks, ignore_index=True)\n",
    "    # type=4,为购买\n",
    "    df_ac = df_ac[df_ac['type'] == 4]\n",
    "\n",
    "    return df_ac[[\"user_id\", \"sku_id\", \"time\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Iteration is stopped\n",
      "Iteration is stopped\n",
      "Iteration is stopped\n",
      "Iteration is stopped\n"
     ]
    }
   ],
   "source": [
    "df_ac = []\n",
    "df_ac.append(get_from_action_data(fname=ACTION_201602_FILE))\n",
    "df_ac.append(get_from_action_data(fname=ACTION_201603_FILE))\n",
    "df_ac.append(get_from_action_data(fname=ACTION_201603_EXTRA_FILE))\n",
    "df_ac.append(get_from_action_data(fname=ACTION_201604_FILE))\n",
    "df_ac = pd.concat(df_ac, ignore_index=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "user_id     int64\n",
      "sku_id      int64\n",
      "time       object\n",
      "dtype: object\n"
     ]
    }
   ],
   "source": [
    "print(df_ac.dtypes)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# 将time字段转换为datetime类型\n",
    "df_ac['time'] = pd.to_datetime(df_ac['time'])\n",
    "\n",
    "# 使用lambda匿名函数将时间time转换为星期(周一为1, 周日为７)\n",
    "df_ac['time'] = df_ac['time'].apply(lambda x: x.weekday() + 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 周一到周日每天购买用户个数\n",
    "df_user = df_ac.groupby('time')['user_id'].nunique()\n",
    "df_user = df_user.to_frame().reset_index()\n",
    "df_user.columns = ['weekday', 'user_num']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 周一到周日每天购买商品个数\n",
    "df_item = df_ac.groupby('time')['sku_id'].nunique()\n",
    "df_item = df_item.to_frame().reset_index()\n",
    "df_item.columns = ['weekday', 'item_num']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# 周一到周日每天购买记录个数\n",
    "df_ui = df_ac.groupby('time', as_index=False).size()\n",
    "df_ui = df_ui.to_frame().reset_index()\n",
    "df_ui.columns = ['weekday', 'user_item_num']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f38c0faccd0>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nPE6SJPWB5uZmJ8DcBRmcJEnqZc3NzSy4agFtjW19ep6akTVMnzm9asLTddddx+WXX84vf/nL/q5K\njxmcJEnqZa2trbQ1ttEwpIH6ofV9co6mliaWNS6jtbW1aoLTtGnTmDZt2tblAw44gEsvvZSTTz65\nH2vVPQYnSZL6SP3QekbUjei7E/Td+4N77Pnnn2e33Xbr72r0GQeHS5I0AAwaNIh777136/Kll17K\n5MmTty6fe+657LPPPgwbNoxDDjmExYsXb912/fXXM378eIYPH84RRxzB0qVLt26bPHky5557Liec\ncAJ77rknN910U6d1uOaaa3jjG98IwHvf+15Wr17N1KlT2WuvvfjIRz4CwJNPPslpp53Gvvvuy9ix\nYzn77LPZvHkzAHfccQfDhw/nG9/4BmPHjmXUqFHMmzePBx54gEmTJjFs2DDe85738OyzfZcoDU6S\nJA0AEdHpuiVLlrBw4ULuvvtuNmzYwM9+9jMOOuggABYvXsycOXO49tprWb9+Peeddx4nnXQS69ev\n33qca665hi996Uts2rSJY489tlA9vv/977P//vtz/fXXs3HjRi6//HIATj75ZPbdd19WrlzJfffd\nx7333ssXvvCFrftv2rSJlStXsmrVKhYuXMgnPvEJPvnJT/KjH/2I1atX86c//Ykrr7xyx25WF6oi\nOEXEyyLi3yNiZUS0RMSfI+L8Dsr9W0Q8lpe5LSJeW7Z9cETMi4gnI6I5IhZFxMvLygyLiPkRsSH/\nXBsRfdNBLUlVorm5maeeeqrbn+bm5v6uunIppU637b777rS1tXHfffexZcsWxo4dy4EHHgjA5Zdf\nzjnnnMP48eMBOPXUU1/SIjVt2jQaGhoAqKmp6XG97rzzTh5++GEuvPBCampqGD58OOeddx4LFizY\nWiYiuOCCC3jZy17Gcccdx4gRI3j3u9/N2LFj2WuvvXjXu97F8uXLu1WH7qiWMU7/CnwIOB14AJgI\nfCciNqSU5gFExLnAbOAM4CHgfGBJRByUUnomP86lwLuA9wJPA18DboyICenFf7mFwL7A8UAA3wSu\nBU7p64uUpEq0I0+IVdtTXwPVMcccw+c+9znOP/98HnzwQY499lguuugiXvGKV7Bq1Srmzp3LZz/7\nWSALOlu2bOHxxx/fuv/+++/fK/VYtWoV69evZ8SIF8eFvfDCC9uEqz333HObcDZ06FDGjBmzzXJf\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f38c5a1afd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 条形宽度\n",
    "bar_width = 0.2\n",
    "# 透明度\n",
    "opacity = 0.4\n",
    "\n",
    "plt.bar(df_user['weekday'], df_user['user_num'], bar_width, \n",
    "        alpha=opacity, color='c', label='user')\n",
    "plt.bar(df_item['weekday']+bar_width, df_item['item_num'], \n",
    "        bar_width, alpha=opacity, color='g', label='item')\n",
    "plt.bar(df_ui['weekday']+bar_width*2, df_ui['user_item_num'], \n",
    "        bar_width, alpha=opacity, color='m', label='user_item')\n",
    "\n",
    "plt.xlabel('weekday')\n",
    "plt.ylabel('number')\n",
    "plt.title('A Week Purchase Table')\n",
    "plt.xticks(df_user['weekday'] + bar_width * 3 / 2., (1,2,3,4,5,6,7))\n",
    "plt.tight_layout() \n",
    "plt.legend(prop={'size':9})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**分析**: 一周用户购买数量分布相对比较均衡,周六周日购买数相对较少,可能是此时大家都去过周末玩了,而平时可以逛京东作为消遣."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 一个月各天购买情况"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2016年2月"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Iteration is stopped\n"
     ]
    }
   ],
   "source": [
    "df_ac = get_from_action_data(fname=ACTION_201602_FILE)\n",
    "\n",
    "# 将time字段转换为datetime类型并使用lambda匿名函数将时间time转换为天\n",
    "df_ac['time'] = pd.to_datetime(df_ac['time']).apply(lambda x: x.day)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "df_user = df_ac.groupby('time')['user_id'].nunique()\n",
    "df_user = df_user.to_frame().reset_index()\n",
    "df_user.columns = ['day', 'user_num']\n",
    "\n",
    "df_item = df_ac.groupby('time')['sku_id'].nunique()\n",
    "df_item = df_item.to_frame().reset_index()\n",
    "df_item.columns = ['day', 'item_num']\n",
    "\n",
    "df_ui = df_ac.groupby('time', as_index=False).size()\n",
    "df_ui = df_ui.to_frame().reset_index()\n",
    "df_ui.columns = ['day', 'user_item_num']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f38ab66ffd0>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABW4AAAPcCAYAAADR5iJaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3X2YXWV9L/zvHQIzGTYMmcAVREhLj7Wmh0qbQajVcyoW\na63iwVLtgVDhsRJReuCgBYQWq9T69PGlShFUrKcHMYbaN6lK7YPoY6umWicKqLS+EEDl5cEhDtkk\newS8zx97J50MM0MCmZk1yedzXXMla63fWuu31uw/4Jt733eptQYAAAAAgOZYNN8NAAAAAACwI8Et\nAAAAAEDDCG4BAAAAABpGcAsAAAAA0DCCWwAAAACAhhHcAgAAAAA0jOAWAAAAAKBhBLcAAAAAAA0j\nuAUAAAAAaBjBLQBAg5VSTi+l/HiKn0dKKW99HNf7/0opN89Gr000xft7qJTy3VLK/yqlHDZPPd1e\nSvn7+bj3rprh8zf557ZdvO5ZvfN+didqry2l3Pr4nwIAYGFaPN8NAADwmGqSM5L8+6T9dz3Oa+1t\nJr6/JUn+a5KLk/zXUspRtdbOPPSzUHw8yS9O2vcvSf4qyTsm7BvfxevW7Px72JVaAIA9huAWAGBh\n+HqtdcN8NlBKWZRkca31R3N0vyW11q276XIT399nSymLk/xBkpOSXPtEL15K6Z+HAHjW1VpHk4xO\n3FdKSZJ7a61fmpemAAD2EqZKAADYQ5RSXlNK+UopZUsp5f5Syl+VUo6cpvbZpZT1vdrvlVIu7QWz\n247/RO+r7OeXUn6/91X4TpLnTPj6/IpJ1/zl3v7/OmHfCaWUj/amJ9haSvlWKeW9pZRlk859Y+/c\nXyil/HUp5f4k3y6lnNbbf9wUz/CGUsqPSimHPo7X9S9JSpKfnHj/Ke5xxuRn3TbVQSnlJaWUDaWU\nrUne0DtWSin/Y8LvYVPvPb9oims/v5Qy0qu7tZTyf006fnAp5YpSytdLKZtLKfeWUm4spTx7imu9\nupTy1V7dA73rvXlSzfJSyvt6v4vxUsptvXe4z+N4f1MqpRxXSvnL3jva2rvHB0spT57mlEN6x+/v\n9f63pZQjduI+pZRybinlpt59RntTKqx4rHMBABYKI24BABaGfSYHbLXWR7b9vZRyVZKXJ7ksyQVJ\nhpL8YZLPl1KOrrXeN+HUJyVZl+QtSb6V5IXpjj49KMk5k+57TrpTDLwuyQO9+idl+q+uT97/lCRf\nTPK/kmxK8hNJXpvkn0spPzfhGbad9ze93q5Msn+STyZ5W5Kze9fZ9rz7JFmT5G9qrfdM08tMfrr3\n5/8/4f5TPdNU+2uS4SQrk7w5ycYkD/aOXZ3k1CR/nuSSJD9Ksiq9gHiCn0/y9iR/kuTeJK9M8oFS\nyrdqrZ/r1Qz1/rw0yd3pvo+XJPlMKeVXaq3/lCSllP+e5Ip0f/evS/LjdN/79vljSynLk/xrkoeT\nvDHJbUme2evxJ5L8zhTP/nj8VJJbk3w43ZG6hyX53SRfKqU8rda6eUJtSfLBJJ9I8lvpvqO39J7v\n6Frrg5ne1UlemuRPk3wmySG95/rnUsrP11o37abnAQCYN4JbAIDmK5kQWvbUUsq+tdYfl1J+Md3g\n77xa62XbTyrln9MNWl+b5KIJ5w4leXGt9RO97U+VUgaSvLqU8tZa6/cm1G5N8vxJIfFON15rfe8O\nD1LKF5J8NskdSV6Q7hyqE/3vWuulk855b5LXl1JeW2v9QW/3yekGyO/eyVa2Bd/9SZ6T5PfTDaI/\nttMPs6ODk6ystW5flKuU8l+SnJbkj2qtfzih9v+d4vxlSZ5Za/1+79x/TnJCuqHv55Kk1vrNdAPr\nbddf1LvWkekG6v/UO/RLSTbVWs+bcP3PTLrfm5IMJvnZbfdMNyDtJHlbKeVttdZ/29mHn06tdd3E\n7d47/4d0A/LfSjfQnuifaq2vmVD/7SQ3phvKv3Oqe5RSnpPue351rfV9E/Z/Id1/ZDgn3ecFAFjQ\nTJUAANB8Nd2g6pgJP8+otW77av8L0x1l+aFSyj7bftINy25KN6icaPOE0HabDyfZJ92Fuyb6+4mh\n7a4qpRzSmxrhzlLKw0keSje0remOWJ38nH87xWXem254feaEfb+b5OZa6+d3po10g++HkmxO8vfp\nLuz2a5NGIu+KWyaGtj2/lu4zXLkT5391QoCaWut4km+mO/r1Pxov5azedApb0x0t+1CSX8mO7+5L\nSQ4qpXy4lPLiydNQ9Lww3TD3nkmfkU+m+35+eSd6fkyllANKKe8opXynlPJQr9+xJPtl6t/3h3fY\nUetn0h2BfPwMt3lhuu9i3aRn+X6Sb+TRn3cAgAXJiFsAgIXh32ZYnGx5uv8gP1UIWdP9WvxE905R\nt226gcmh39073eEkpTs094Ykh6b7df+vpTulwKJ0g9QlU5z2qPvVWu8tpXwkyatKKX+S5OeSPDs7\nBrkzqUl+O8m/pRv43Vtrneod7Iqp3sshSR7eyWuPTrFvPBPeSSnltelOp3BlulNZ/CDJI+lOz/C0\nbXW11g/1gsszk/x1uqOL/zXJH9RaP9UrW57kxHSD1MlquiOId4e/SXJcuiNeN6QblNd0R9FO9fue\napqLe/Loz+FEy9P9/5gfTnGsJvn6LvQLANBYglsAgIXvB+mOuH12unOqTjY+aXv5FDXbFviaHChO\nNe9rp/dn36T9k8O2o5I8PcnLa60f2razlPKfprjmTPdLkj9LsjrJSelOsbApk0ZrPoaZgu+k90y9\n6ScmhpvTBYhT9XlfksWllOW7IRhOus/7mVrr707cWUo54FHN1Hp1kqtLKUvSHTV9aZKPlVKeWmv9\nbrqfkZuSXJzuCNvJ7nqizZZSDkl3uocLaq1/OmH//ulO0zCVqRaWOzTd+Xin84N0A+hnpfu5n2zr\nTjUMANBwglsAgIXv40kuTHJ4rfWvd6L+gFLKibXWifO7rk53NOc/TXPORLenG/49Pd05dLc5aVLd\ntnBzcph8VqYPaKdUa/1yKeVf0n3Oo5K8t9a6OwO623t/Pj3JyIT9/20XrvEP6c4l/Op0F8p6omom\nhe6llKenu6jYnVOe0H0n/1hK6Uvy0ST/Ocl30/2MvCDJbbXWsd3Q23T9JlP/vqdS0v3c/cP2HaU8\nN91/WJg8R+9EH09ybpJDa62T50gGANhjCG4BAJpvxtXAaq1fKKW8P8lflFKekW74+mC6i3c9O925\nYN834ZT7k7ynlLIi3XlVX5ju4mZXTFqYbDr/mu4iUG8vpeyb7ujXl6Q7AnKif0vynSR/0ltY6/50\nv65/wk7cYyp/lmRduqMsd2Ye2W12ZjW169N9jg+UUv4w3SkVzkhy+M7epNb6uVLKNUn+oJRyaLoB\n43iSX0jyYK31il3oOb3z/6CU8sZ0F3R7WpJL0p36Yvt/x5dSrkp3lOnn053C4UlJXt97nm0jV9+Q\n7ntfX0r5s3R/f/3pLnT2giSvqrU+oVG3tdYflFK+lOTiUsoDSb6X5Lnpzs+8eZrTnl1KeU+Sv+v1\n8uYkG5O8f4b7fLr3nteWUq5IdzG3LUkOS/Jfknyp1voXT+RZAACaQHALANB8jzk6tdZ6VillfZJX\npTvic1G6X3//fLqLV010V7qLe70j3dGr96cbmL1xivs+6t611h+XUl6U5N1J3pNuOHltkrOTfGJC\n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\n1llnZf369bnzzjuz33775ZxzzkmSHHHEEXnHO96R+++/P/fff382bdqUzZs35/zzz99+7qJFe0+c\nufc8KQAAAAAw61atWpVrrrkmjzzySL761a/mmmuu2X7sy1/+ctavX5+HHnoofX192X///bN4cXcZ\nrrPPPjtve9vbsmHDhiTJli1bcuONN+4w4nZvYnEyAAAAAFjgtoyNNebal19+eU4//fQsXbo0z3rW\ns3LGGWdk/fr1SZIHHnggr3vd63Lbbbdl3333zTOf+cy85z3vSZK86EUvyvj4eM4888xs3LgxfX19\nOfbYY3PFFVckmXrRsz2Z4BYAAAAAFqj+/v4s6+vL6MhIts7ifZb19aW/v3+nap/+9KfnK1/5ypTH\nnvvc5057LElOPvnknHzyyVMe+/SnP71T999TCG4BAAAAYIFqtVpZs3p1Op3OrN6nv78/rVZrVu/B\njgS3AAAAALCAtVotoeoeyOJkAAAAAAANI7gFAAAAAGgYwS0AAAAAQMMIbgEAAAAAGkZwCwAAAADQ\nMIJbAAAAAICGWTzfDQAAAAAAj1+73U6n05nVe/T396fVau1U7VFHHZW3vvWt+fVf//VZ7WlPJ7gF\nAAAAgAWq3W7nqg9eldH26KzeZ1lrWda8fM1Ohbdf+9rXkiRXX3113vWud+UrX/nKrPa2pxLcAgAA\nAMAC1el0MtoezZKnLsnAAQOzco8tm7dk9Juj6XQ6Oz3qNklqrSmlzEpPewNz3AIAAADAAjdwwEBa\nB7Vm5WdXA+Ejjzwy73rXu/LqV786t9xySw444IAceOCB+d73vpckufbaa3P00Udn6dKlOe6447J+\n/frt5x5//PF5/etfnxNOOCGtVivPfvazc/fdd+cNb3hDDjnkkKxYsSLXXXfdbn13TSW4BQAAAAB2\nq5/6qZ/Ke9/73vzcz/1cNm/enAceeCCHH354rr/++lxwwQX54Ac/mE2bNuWiiy7KiSeemE2bNm0/\n98Mf/nAuv/zy3H///env78+znvWsLFu2LPfee2/e8IY35JWvfGUeeeSReXy6uSG4BQAAAADmxJVX\nXpnzzz8/Rx99dJLkpJNOytOe9rRcf/3122tOO+20rFy5Mvvtt19OPvnkjI+P59xzz82iRYuyevXq\njI6O5o477pivR5gzglsAAAAAYE7cfvvtufjiizM0NJShoaEsXbo0N910U+66667tNYceeuj2vw8M\nDGT58uXbt5csWZKkuyjbns7iZAAAAADAbrdo0aPHjB5xxBE555xzsmbNmnnoaGEx4hYAAAAA2O2W\nL1+eu+++O51OZ/u+s88+O29729uyYcOGJMmWLVty44037jDili4jbgEAAABggduyeUtjrl1KSZI8\n97nPzS/+4i/myU9+cmqtufnmm/OiF70o4+PjOfPMM7Nx48b09fXl2GOPzRVXXLHDuTtz/T2d4BYA\nAAAAFqj+/v4say3L6DdHszVbZ+0+y1rL0t/fv1O1t9122/a//93f/d2jjp988sk5+eSTpzz305/+\n9A7bp59+ek4//fQd9j3yyCM71cdCJ7gFAAAAgAWq1WplzcvX7DAdwWzo7+9Pq9Wa1XuwI8EtAAAA\nACxgrVZLqLoHsjgZAAAAAEDDCG4BAAAAABpGcAsAAAAA0DCCWwAAAACAhhHcAgAAAAA0jOAWAAAA\nAKBhBLcAAAAAAA2zeL4bAAAAAAAev3a7nU6nM6v36O/vT6vVmtV7sCPBLQAAAAAsUO12O2uvWpvx\n0fFZvU/fsr6sXrN6wYS3H/7wh3PllVfmc5/73Hy38rgJbgEAAABggep0OhkfHc/wkuEMDgzOyj3G\ntoxlZHQknU5nwQS3p556ak499dTt20ceeWQuu+yyvPjFL57HrnaN4BYAAAAAFrjBgcEMtYZm7wZb\nZ+/Sj9cjjzySffbZZ77bmDUWJwMAAAAAdptFixbl5ptv3r592WWX5fjjj9++feGFF+ZJT3pSDjro\noDztaU/L9ddfv/3Ytddem6OPPjpLly7Ncccdl/Xr128/dvzxx+fCCy/M85///BxwwAH55Cc/OW0P\nV199dX7hF34hSfKyl70sd955Z0455ZQceOCBec1rXpMkue+++3LaaaflsMMOy+GHH57zzjsvDz30\nUJLks5/9bJYuXZr3vve9Ofzww3PwwQfn8ssvzze+8Y0ce+yxOeigg/Ibv/Eb2bp19hJtwS0AAAAA\nsNuUUqbdd8MNN2TdunX56le/mh/+8If51Kc+lac+9alJkuuvvz4XXHBBPvjBD2bTpk256KKLcuKJ\nJ2bTpk3br3P11VfnLW95SzZv3pwTTjhhp/r4yEc+khUrVuTaa6/NAw88kCuvvDJJ8uIXvziHHXZY\nNm7cmFtuuSU333xz3vzmN28/f/Pmzdm4cWNuv/32rFu3Lq997Wvzute9Ln/7t3+bO++8M9/85jfz\nvve974m9rBkIbgEAAACA3abWOu2xfffdN+Pj47nlllvy8MMP5/DDD89TnvKUJMmVV16Z888/P0cf\nfXSS5KSTTnrUiNxTTz01w8PDSZK+vr7H3deXv/zlfPvb385b3/rW9PX1ZenSpbnooouydu3a7TWl\nlFx66aVZvHhxnve852VoaCgveclLcvjhh+fAAw/MC1/4wmzYsGGXetgVglsAAAAAYE485znPyZve\n9KZccsklOeSQQ/LSl740d9xxR5Lk9ttvz8UXX5yhoaEMDQ1l6dKluemmm3LXXXdtP3/FihW7pY/b\nb789mzZt2n6voaGh/OZv/mbuu+++7TUHHHDADuHwwMBADj300B222+32bulnKhYnAwAAAIAFbmzL\nWGOuvf/++2fLli3bt+++++4djp911lk566yzsnnz5px11lk555xzct111+WII47IOeeckzVr1kx7\n7UWLHt841MnnHXHEEVm+fHm+//3vP67rzQXBLQAAAAAsUP39/elb1peR0ZFk9tbJSt+yvvT39+9U\n7apVq3LNNdfkGc94Rm655ZZcc801+Zmf+Zkk3SkKHnrooRxzzDHp6+vL/vvvn06nkyQ5++yzc955\n5+WYY47JqlWrsmXLlqxfvz4rV67MYYcd9oT6X758eb7zne9s337GM56RI444IpdcckkuvPDCtFqt\n3HHHHbn11lvza7/2a0/oXruL4BYAAAAAFqhWq5XVa1ZvDz9nS39/f1qt1k7VXn755Tn99NOzdOnS\nPOtZz8oZZ5yR9evXJ0keeOCBvO51r8ttt92WfffdN8985jPznve8J0nyohe9KOPj4znzzDOzcePG\n9PX15dhjj80VV1yRZOpFz3bWxRdfnHPOOSd/9Ed/lFNPPTXvfve78/GPfzwXXHBBVq5cmc2bN2fF\nihV51ateNe01nsj9H48y02TBe7JSyqokIyMjI1m1atV8twMAAAAAM9qwYUOGh4cjz2q+6X5X2/Yn\nGa61zriymcXJAAAAAAAaRnALAAAAACw4Rx11VA488MDtPwcccEAOPPDAvOY1r5nv1nYLc9wCAAAA\nAAvO1772tfluYVYZcQsAAAAA0DBG3AIAAADAAnLrrbfOdws8ht3xOxLcAgAAAMACcPDBB2dgYCCn\nnXbafLfCThgYGMjBBx/8uM8X3AIAAADAArBixYrceuut+cEPfjDfrbATDj744KxYseJxny+4BQAA\n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\nWdMAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f38f9cf1090>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 条形宽度\n",
    "bar_width = 0.2\n",
    "# 透明度\n",
    "opacity = 0.4\n",
    "# 天数\n",
    "day_range = range(1,len(df_user['day']) + 1, 1)\n",
    "# 设置图片大小\n",
    "plt.figure(figsize=(14,10))\n",
    "\n",
    "plt.bar(df_user['day'], df_user['user_num'], bar_width, \n",
    "        alpha=opacity, color='c', label='user')\n",
    "plt.bar(df_item['day']+bar_width, df_item['item_num'], \n",
    "        bar_width, alpha=opacity, color='g', label='item')\n",
    "plt.bar(df_ui['day']+bar_width*2, df_ui['user_item_num'], \n",
    "        bar_width, alpha=opacity, color='m', label='user_item')\n",
    "\n",
    "plt.xlabel('day')\n",
    "plt.ylabel('number')\n",
    "plt.title('February Purchase Table')\n",
    "plt.xticks(df_user['day'] + bar_width * 3 / 2., day_range)\n",
    "# plt.ylim(0, 80)\n",
    "plt.tight_layout() \n",
    "plt.legend(prop={'size':9})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "**分析**: 从上面可以发现,在2月6号到2月10号之间是我们的农历新年,快递在这几天不上班,因而购物数量相对较少,在我们实际分析时, 可以暂时将这部分数据作为异常数据不去考虑,不加入我们的训练样本中."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 查看特定用户对特定商品的活动轨迹"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def spec_ui_action_data(fname, user_id, item_id, chunk_size=100000):\n",
    "    reader = pd.read_csv(fname, header=0, iterator=True)\n",
    "    chunks = []\n",
    "    loop = True\n",
    "    while loop:\n",
    "        try:\n",
    "            chunk = reader.get_chunk(chunk_size)[\n",
    "                [\"user_id\", \"sku_id\", \"type\", \"time\"]]\n",
    "            chunks.append(chunk)\n",
    "        except StopIteration:\n",
    "            loop = False\n",
    "            print(\"Iteration is stopped\")\n",
    "\n",
    "    df_ac = pd.concat(chunks, ignore_index=True)\n",
    "    df_ac = df_ac[(df_ac['user_id'] == user_id) & (df_ac['sku_id'] == item_id)]\n",
    "\n",
    "    return df_ac"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def explore_user_item_via_time():\n",
    "    user_id = 62969\n",
    "    item_id = 62655\n",
    "    df_ac = []\n",
    "    df_ac.append(spec_ui_action_data(ACTION_201602_FILE, user_id, item_id))\n",
    "    df_ac.append(spec_ui_action_data(ACTION_201603_FILE, user_id, item_id))\n",
    "    df_ac.append(spec_ui_action_data(\n",
    "        ACTION_201603_EXTRA_FILE, user_id, item_id))\n",
    "    df_ac.append(spec_ui_action_data(ACTION_201604_FILE, user_id, item_id))\n",
    "\n",
    "    df_ac = pd.concat(df_ac, ignore_index=False)\n",
    "    print(df_ac.sort_values(by='time'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Iteration is stopped\n",
      "Iteration is stopped\n",
      "Iteration is stopped\n",
      "Iteration is stopped\n",
      "       user_id  sku_id  type                 time\n",
      "12296    62969   62655     1  2016-02-01 11:00:05\n",
      "12307    62969   62655     1  2016-02-01 11:00:05\n",
      "12300    62969   62655     2  2016-02-01 11:00:18\n",
      "12285    62969   62655     1  2016-02-01 11:00:49\n",
      "12305    62969   62655     1  2016-02-01 11:00:49\n",
      "12302    62969   62655     2  2016-02-01 11:02:16\n",
      "12294    62969   62655     1  2016-02-01 11:02:17\n",
      "12304    62969   62655     1  2016-02-01 11:02:17\n",
      "12297    62969   62655     1  2016-02-01 11:03:47\n",
      "12306    62969   62655     1  2016-02-01 11:03:47\n",
      "12303    62969   62655     4  2016-02-01 11:04:00\n"
     ]
    }
   ],
   "source": [
    "explore_user_item_via_time()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "> 预测数据部分: 2016-04-16到2016-04-20用户是否下单P中的商品，每个用户只会下单一个商品；\n",
    "\n",
    "  由于我们需要预测16-20号五天用户的购买情况,那我们不妨分析下用户以5天为单位(周期为5)购买情况."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    ""
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2.0
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}